package com.haohan.jingyuan.user.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.haohan.jingyuan.user.entity.UserInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;

/**
 * 用户信息Mapper接口
 * 
 * @ClassName UserInfoMapper
 * @Description 用户信息数据访问层
 * @Author hexijun
 * @Time 2025/01/18 22:20
 * @Version 1.0
 */
@Mapper
public interface UserInfoMapper extends BaseMapper<UserInfo> {

    /**
     * 根据用户名查询用户信息
     * 
     * @param userName 用户名
     * @return 用户信息
     */
    UserInfo findByUserName(@Param("userName") String userName);

    /**
     * 根据用户ID查询用户信息
     * 
     * @param userId 用户ID
     * @return 用户信息
     */
    UserInfo findByUserId(@Param("userId") String userId);

    /**
     * 分页查询用户列表
     * 
     * @param page 分页对象
     * @param userName 用户名（可空）
     * @param status 用户状态（可空）
     * @param gmtCreatedStart 创建时间开始（可空）
     * @param gmtCreatedEnd 创建时间结束（可空）
     * @return 分页用户列表
     */
    IPage<UserInfo> selectUserListPage(Page<UserInfo> page,
                                      @Param("userName") String userName,
                                      @Param("status") Integer status,
                                      @Param("gmtCreatedStart") Date gmtCreatedStart,
                                      @Param("gmtCreatedEnd") Date gmtCreatedEnd);

    /**
     * 通过用户名与密码联合查询用户信息
     * 
     * @param username 用户名
     * @param password 密码
     * @return 匹配的用户信息，如果不存在则返回null
     */
    UserInfo findByUsernameAndPassword(@Param("username") String username, @Param("password") String password);

    /**
     * 根据用户ID更新密码
     * 
     * @param userId 用户ID
     * @param newPassword 新密码（MD5加密后的）
     * @param modifier 修改人
     * @return 更新的行数
     */
    int updatePasswordByUserId(@Param("userId") String userId, @Param("newPassword") String newPassword, @Param("modifier") String modifier);
}
